<?php

namespace App\Http\Controllers\Wechat;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repos\OrderRepo;
use App\Repos\ShopRechargeRepo;
use EasyWeChat,Log;
use EasyWeChat\Factory;
use App\Services\RedisService;

class PayController extends Controller
{
    public function payNotify()
    {
    	$config = config('wechat.payment.default');    	
    	$app = Factory::payment($config);
    	Log::info('进入回调：');
    	$response = $app->handlePaidNotify(function($message, $fail){
		    // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单

		    $order = OrderRepo::find(['code'=>$message['out_trade_no']]);

		    if (!$order || $order->paid_at) { // 如果订单不存在 或者 订单已经支付过了
		        return true; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
		    }

		   

		    if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态，不代表支付状态
		        // 用户是否支付成功
		        if (array_get($message, 'result_code') === 'SUCCESS') {
		        	if(array_get($message,'total_fee')!=$order->total_amount) {
		        		Log::info('微信回调订单金额'.array_get($message,'total_fee').'与系统中的订单金额.'.$order->total_amount.'数据不一致');
		        		return false;
		        	}
		            $order->paid_at = array_get($message,'time_end'); // 更新支付时间为当前时间
		            $order->status = '2';

		            $order->transaction_id = array_get($message,'transaction_id');

		        // 用户支付失败
		        } elseif (array_get($message, 'result_code') === 'FAIL') {
		            $order->status = '0';
		        }
		    } else {
		        return $fail('通信失败，请稍后再通知我');
		    }

		    $order->save(); // 保存订单

		    // 缓存
		  
		    $redis_key = 'fruit:users:order:count:'.$order->user_id.'_wait_pay';
		    $has_key = RedisService::exists($key);
		    if($has_key) {
		    	RedisService::decr($key);
		    }
		    

		   
		    return true; // 返回处理完成
		});

		$response->send(); // return $response;
    }

    /**
     * 红包充值回调
     */
    public function rechargeNotify()
    {
    	$config = config('wechat.payment.shop');    	
    	$app = Factory::payment($config);
    	Log::info('进入回调：');
    	$response = $app->handlePaidNotify(function($message, $fail){
		    // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单

		    $order = ShopRechargeRepo::find(['code'=>$message['out_trade_no']]);

		    if (!$order || $order->paid_at) { // 如果订单不存在 或者 订单已经支付过了
		        return true; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
		    }

		   

		    if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态，不代表支付状态
		        // 用户是否支付成功
		        if (array_get($message, 'result_code') === 'SUCCESS') {
		        	if(array_get($message,'total_fee')!=$order->money) {
		        		Log::info('微信回调订单金额'.array_get($message,'total_fee').'与系统中的订单金额.'.$order->money.'数据不一致');
		        		return false;
		        	}
		            $order->paid_at = array_get($message,'time_end'); // 更新支付时间为当前时间
		            $order->status = '2';

		            $order->transaction_id = array_get($message,'transaction_id');

		        // 用户支付失败
		        } elseif (array_get($message, 'result_code') === 'FAIL') {
		            $order->status = '0';
		        }
		    } else {
		        return $fail('通信失败，请稍后再通知我');
		    }

		    $order->save(); // 保存订单

		    // 充值成功 生成红包
		    $data['recharge_id'] = $order->id;
		    $data['shop_id']     = $order->shop_id;
		    $data['money']       = $order->money;		    
		    ShopRechargeRepo::createEnvelop($data);

		   
		    return true; // 返回处理完成
		});

		$response->send(); // return $response;
    }
}
